#include <bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
const int N = 510;
const int INF = INT_MAX;
const string NAME = "solve";
int n,m;
int cnt_1,cnt_0;
int dp[N][N],mod;
int col[N];
int id;
void add(int &x, const int y) {
x += y;
if(x >= mod) {
x -= mod;
}
}
int calc(int x) {
return 1LL*x*(x-1)/2%mod;
}
signed main()
{
if (fopen((NAME + ".inp").c_str(), "r")) {
freopen((NAME + ".inp").c_str(), "r", stdin);
freopen((NAME + ".out").c_str(), "w", stdout);
}
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m >> mod;
for(int i = 1 ; i <= m ; i++) {
string s; cin >> s;
for(int j = 1 ; j <= n ; j++) {
if(s[j-1] == '1') {
col[j]++;
}
}
}
for(int i = 1 ; i <= n ; i++) {
if(col[i] > 2) {
cout << 0;
return 0;
}
if(col[i] == 0) {
cnt_0++;
}
if(col[i] == 1) {
cnt_1++;
}
}
dp[0][0] = 1;
for(int dem_0 = 0 ; dem_0 <= n ; dem_0++) {
for(int dem_1 = 0 ; dem_1+dem_0 <= n ; dem_1++) {
if(dem_0 > 1) {
/// chon 2 o 0
add(dp[dem_0][dem_1],1LL*dp[dem_0-2][dem_1+2]*calc(dem_0)%mod);
}
if(dem_1 > 1) {
/// chon 2 o 1
add(dp[dem_0][dem_1],1LL*dp[dem_0][dem_1-2]*calc(dem_1)%mod);
}
if(dem_0 > 0) {
/// chon 1 o 1 va 1 o 0
add(dp[dem_0][dem_1],1LL*dp[dem_0-1][dem_1]*dem_0%mod*dem_1%mod);
}
}
}
cout << dp[cnt_0][cnt_1];
return 0;
}
1632C - Strange Test | 673A - Bear and Game |
276A - Lunch Rush | 1205A - Almost Equal |
1020B - Badge | 1353A - Most Unstable Array |
770A - New Password | 1646B - Quality vs Quantity |
80A - Panoramix's Prediction | 1354B - Ternary String |
122B - Lucky Substring | 266B - Queue at the School |
1490A - Dense Array | 1650B - DIV + MOD |
1549B - Gregor and the Pawn Game | 553A - Kyoya and Colored Balls |
1364A - XXXXX | 1499B - Binary Removals |
1569C - Jury Meeting | 108A - Palindromic Times |
46A - Ball Game | 114A - Cifera |
776A - A Serial Killer | 25B - Phone numbers |
1633C - Kill the Monster | 1611A - Make Even |
1030B - Vasya and Cornfield | 1631A - Min Max Swap |
1296B - Food Buying | 133A - HQ9+ |